#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QUdpSocket>
#include<QDebug>
#include<QTcpSocket>
#include<QMetaEnum>
#include <QTimer>
#include "message.h"


QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

/**
 * @brief 实现UDP广播的接收方
 * @note UDP 广播是一种将 UDP 数据报发送给同一网络中的所有主机的通信方式。
 * 在 UDP 广播中，发送方将数据报发送到特定的广播地址，所有在同一网络中的主机都能接收到这些数据报。
    广播地址是一个特殊的 IP 地址，通常是网络的最后一个地址，也就是网络地址与子网掩码按位求或的结果。
    例如，对于一个以 192.168.0.0/24 子网掩码为例的网络，广播地址为 192.168.0.255。

    使用 UDP 广播，发送方将数据报发送到广播地址，并且所有接收方都能收到这个数据报。
    接收方可以通过监听广播地址来接收广播消息。

    需要注意的是，UDP 广播是在局域网范围内实现广播通信的，广播数据不会跨越路由器或者防火墙，
    因此只能在同一局域网内进行广播通信
 *
 */
class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();


private slots:
    /**
     * @brief 显示消息
     * @param info
     */
    void showMessage(const QString &info);

    /**
     * @brief 发送消息
     */
    void on_btnSend_clicked();

    /**
     * @brief 数据到来的信号
     */
    void  slotReadyRead();

    /**
     * @brief 出错
     */
    void slotError(QAbstractSocket::SocketError);


private:
    Ui::Widget *ui;
    QUdpSocket  m_udp;
    bool m_bind = false;
};
#endif // MAINWINDOW_H
